貝式分類器(Bayesian Classifier)是一種基於機率模型的機器學習模型。它有很多名稱,又叫做貝葉斯分類器、簡單貝葉斯、樸素貝葉斯...等。其根據貝氏定理(Bayes' theorem)為基礎,透過機率統計來判斷未知的資料類別。
貝氏定理描述在一些已知的一些條件下,某件事發生的機率。就像是我們能透過過去的天氣狀況來預測明天的天氣那樣。
貝式定理公式為:
P(A)為 A 事件的出現機率;P(B)為 B 事件的出現機率;
P(A|B)代表在 B 事件發生的前提下, A 事件出現的機率;
P(B|A)代表在 A 事件發生的前提下, B 事件出現的機率;
A 和 B 為皆為隨機事件,且P(B)機率不為。
打個比方吧。
假設某一間大學內大一、大二、大三、大四的學生分別佔了22%、28%、24%、26%;
而大一至大四女學生的佔比分別為 40%、30%、20%、15%。
假設我今天在大學內遇到一位女學生,該位女學生為大一的機率是多少?
此時我們套用公式,將P(B)視為遇到女學生的機率、P(A)視為遇到大一學生的機率,因此:
遇到女學生的機率:
遇到大一學生的機率:
在大一的學生中遇到女生的機率:
所以答案就是≈0.34
以此類推,我們是不是就能利用這種單純的方法應用至其他領域,推測出其他領域的資料了呢?比如說:
從上面提出的例子我們可以知道貝式定理用來分析機率的方法。而貝式分類器就是這麼一個機率模型分類器。因此所有的模型參數都可以通過訓練集的相關頻率來估計。而不同的資料集自然會有不一樣的訓練架構,以下是幾個比較常用的貝式分類架構:
1. 高斯貝式分類器 GaussianNB:
主要用於特徵為連續變數並符合符合常態分佈時。像是年紀大小與罹患癌症的機率、體重大小與罹患心血管疾病的機率...等。
首先對資料進行類別分類,假設訓練集中有一個連續屬性 ,然後計算每個類別中 的均值和變異數。令 表示為 在 c 類上的均值,令 為 在 c 類上的變異數。
機率計算公式如下:
看不懂也沒關係,總之你只要知道高斯貝式會透過這種方法將連續的數值離散化。而為什麼我們要把數值離散化?
因為當訓練樣本數量較少或者是已知精確分布時,通過機率分布的方法或許能表現的不錯,但是在大量樣本的情形下,我們可以學習到更多資料的分布,因此離散化的方法表現會更加優秀。所以單純貝氏方法大多都會用離散化方法,而不是機率分布估計的方法。
2. 多項式貝氏分類器 MultinomialNB:
多項式貝氏分類器主要用在特徵為離散變數的情況,比方說次數、類別等等。像是公司人數與員工工作效能的關係、商品不良數與員工偷懶的機率...等。而在個模型中,會多一個 α 參數,也就是平滑化的處理。在不設定的情況下,α 預設為1.0,機率計算公式如下:
N 是總樣本數、k 是總類別數、 是類別為 的數量、 n 是特徵的維數、 是類別為 的樣本中,第 i 維特徵值為 的樣本數。
3. 伯努力貝氏分類器 BernoulliNB:
與多項式的模型一樣,伯努力貝氏分類器也適用於離散特徵的狀況,但不同的是伯努力模型的特徵取值只能是 1 和 0 的二元特徵。比方說某個單字曾在該文章內出現過,則該篇文章特徵值為 1 ,沒有出現則是 0 。
其條件計算的方式為:
一樣透過iris資料集進行簡單的分類實作:
from sklearn.naive_bayes import GaussianNB # 高斯貝氏分類器 GaussianNB
from sklearn.naive_bayes import MultinomialNB # 多項式貝氏分類器 MultinomialNB
from sklearn.naive_bayes import BernoulliNB # 伯努力貝氏分類器 Bernoulli NB
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
X=iris.data
Y=iris.target
# 拆分成訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
model=GaussianNB() # 這裡使用高斯貝氏分類器
model.fit(X_train,y_train)
print(model.predict(X_test)) # 印出測試的預測結果
print(y_test) # 印出測試答案
print(model.score(X_test,y_test)) # 印出預測準度
https://blog.csdn.net/u012162613/article/details/48323777
https://pyecontech.com/2020/03/06/python_bayesian_classifier/
那假設有一群尚未分類的資料,我們要怎麼分類呢?
那就是非監督式學習的問題了。
明天就讓我們聊聊非監督式學習中的K-Means吧!